#pragma once
#include "state.h"
#include "krryn.h"

#include <memory>

/// TEMP
#include "md5_builder.h"

namespace krryn{
namespace system{ template<typename _Tag> class renderer; }
namespace core{ class job_manager; }
namespace view{ class camera_fps; class camera_fps_controller_default; }
namespace usr{
	class audio_thread;
	class state_intro : public core::state{
	public:
		state_intro() : state(":intro") {}
		virtual ~state_intro();
	protected:
		virtual void init();
		virtual void activate();
		virtual void deactivate();
		virtual void tick(float a_DeltaTime);
	private:
		typedef system::software_tag api;

		scene::mesh<api> *m_Mesh;
		core::job_manager *m_Manager;
		audio_thread *m_Audio;

		view::camera_fps_controller_default *m_Controller;
		view::camera_fps *m_Camera;
		scene::vertex_buffer<api>::ptr m_VB;
		scene::index_buffer<api>::ptr m_IB;

		system::default_renderer<api> *m_Default;
		gui::event_loop m_EventLoop;

		scene::model<api> m_Model;
	};
}
}
